package com.kotlin.flong.flow

import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.runBlocking

/**
 * @Author:liangjl
 * @Date: 2020/7/10-21:54
 * @Eamil:jilongliang@sina.com
 * @Description:
 * Flow是顺序执行的
 * 对于Flow的收集操作来说，它是运行在调用了终止操作的哪个协程上，默认情况下，它是不会启动新的协程的，每个emit的元素值都会
 * 由所有的中间操作进行处理，最后再由终止操作进行处理，本质上，就是由上游进入到下游
 */

fun main() = runBlocking {

    (1..10).asFlow().filter {
        println("filter : $it")
        it % 2 == 0
    }.map {
        println("map : $it")
        "Hello $it"
    }.collect { println("collect $it") }


}